""""""
"""
______________________________
time：2021/5/26

数据库的学习:销帮帮系统的练习
ssh连接数据参考资料：https://blog.csdn.net/qq_42539712/article/details/107809909
______________________________

"""

import pymysql
from sshtunnel import SSHTunnelForwarder

# pymysql 通过ssh通道调用数据库
with SSHTunnelForwarder(
        ssh_address_or_host=("39.98.193.117", 2222),  # ssh 目标服务器 ip 和 port
        ssh_username="www",  # ssh 目标服务器用户名
        ssh_password="Dingtalk1505",
        # ssh_pkey="", # ssh 目标服务器证书
        ssh_private_key_password="",  # ssh 目标服务器证书密码
        remote_bind_address=('rm-vy14ml7s45n1m129p.mysql.rds.aliyuncs.com', 3306),  # mysql 服务ip 和 part
        local_bind_address=('127.0.0.1', 10022)  # ssh 目标服务器的用于连接 mysql 或 redis 的端口，该 ip 必须为 127.0.0.1
) as server:
    print("connected!!!!!!!!!!!!!!!!!!")
    # 1.建立连接
    conn = pymysql.Connect(host='127.0.0.1',
                           # server.local_bind_host是参数local_bind_address的ip,此处必须是是127.0.0.1
                           port=server.local_bind_port,  # server.local_bind_host是参数local_bind_address的port
                           user='pro_test_wr',
                           password='MeQQb23QsL7IZiHr',
                           db='xbb_dingtalk_test_single',
                           charset='utf8',
                           cursorclass=pymysql.cursors.DictCursor
                           # """指定游标类，查询的返回结果会以字典或嵌套字典的列表的形式，方便后续对得到的结果进行数据处理,不传这个参数默认获取的结果返回的是元组类型"""

                           )

    # 2.创建游标对象
    cursor = conn.cursor()
    # cursor.execute("show databases")
    # print(cursor.fetchall())

    # 3.执行sql语句
    sql_1 = "SELECT * from tb_saas_supplier where corpid='ding0064986624e3b83b35c2f4657eb6378f' and creator_id='273916061821944099' and del ='0'"
    # 使用游标对象，执行sql语句
    cursor.execute(sql_1)
    # 一定要使用连接对象进行提交
    conn.commit()
    """
    # 4.获取结果： 使用fetch方法对结果进行遍历  获取的是元组
     re = cursor.fetchone()  # 将第一条结果放入rs中
     rr = cursor.fetchall()  # 将所有结果放入rr中
     rs = cursor.fetchmany(2)  # 将多个结果放入rs中
     
      fetch()方法是建立在上一次fetch()方法基础上的,  如果执行打印re,下次再执行打印rs，会从之前已打印的地方之后开始打印
    """

    re = cursor.fetchone()  # 将第一条结果放入rs中
    # print("数据库中获取到的第一条结果：", re)
    rr = cursor.fetchall()  # 将所有结果放入rr中
    print("数据库中获取到的所有结果：", rr)
    # cursor.scroll(3, mode='absolute')  # 指针从结果集的第一行移动4条
    rs = cursor.fetchmany(2)  # 将多个结果放入rs中
    for row in rs:
        print("从数据库中获取到的多个结果：", row)
